PROGRAMACIÓN
ORIENTADA A
RESTRICCIONES

“Un mundo sin restricciones sería totalmente caótico”. “Que algo es predecible implica que existe una restricción”. “Cada ley de la naturaleza es una restricción” (William Ross Ashby)

“Las leyes describen restricciones; no crean”. “El universo está basado en la libertad. Las leyes, restricciones sobre la libertad, son secundarias” (Arthur M. Young)



Sistema Orientado a Restricciones

En un sistema orientado a restricciones, el usuario define (mediante un lenguaje específico) el espacio de soluciones de un problema, suministra las restricciones que existen y especifica el tipo de solución buscada. El sistema, automáticamente, mediante un motor de búsqueda, trata de encontrar la solución.

En teoría, un sistema de este tipo se aproxima al ideal de la programación automática, pues se utiliza una programación meramente declarativa y libera al programador de tener que desarrollar un algoritmo de búsqueda para cada problema. Pero hay dificultades en la práctica: Pero el paradigma de restricciones también proporciona ventajas:
Especificación en MENTAL

Con MENTAL no se necesita ningún lenguaje particular para especificar un Sistema Orientado a Restricciones. Bastan los propios recursos del lenguaje.

Un problema típico de la Programación Orientada a Restricciones consiste en buscar los valores de una serie de variables desconocidas que deben cumplir una serie de condiciones (restricciones) que deben de satisfacer a la vez. En el caso de que la expresión condicional sea muy extensa, se pueden utilizar representaciones (sustituciones potenciales) para mejorar la comprensión.


Ejemplo

Un ejemplo clásico es el “problema de las 8 reinas”. Propuesto por el ajedrecista Max Bezzel en 1848, se trata de encontrar una posición en el tablero de ajedrez con las siguientes restricciones: 1) hay solo 8 reinas en el tablero, y 2) ninguna reina puede atacar a otra reina.

Una de las soluciones del
problema de las 8 reinas

Hay 92 soluciones posibles, de las cuales 12 son esencialmente distintas, pues el resto se obtienen por simetrías, rotaciones y traslaciones.

Este problema (que es NP-Completo) interesó a matemáticos como Gauss y Cantor, que lo generalizaron a n reinas sobre un tablero de n×n casillas.

Numerando las filas de abajo-arriba, y las columnas de izquierda a derecha, y representando las posiciones de las reinas mediante la secuencia (i1 … i8), en donde ij es la columna ocupada por la reina de la fila j, la expresión de la solución, junto con las restricciones, es la siguiente: Una solución (la indicada en la imagen) es: (2 4 5 8 3 1 7 5). Su generalización para n reinas es: Este problema no tiene solución para n=2 y n=3.

Para n=4 tiene una única solución: (2 4 1 3).

La única solución del
problema de las 4 reinas

Para mejorar la comprensión, podemos utilizar expresiones auxiliares. Por ejemplo: Y la expresión general sería:

Adenda

Un poco de historia
Bibliografía